package file;

import java.io.FileInputStream;

import java.io.IOException;
import java.io.InputStream;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 74646
 * Date: 2022-06-21
 * Time: 17:24
 */
public class Demo9 {
    public static void main(String[] args) {
        // 构造方法中需要指定打开文件的路径
        // 此处的路径可以是绝对路径，也可以是相对路径，还可以是 File 对象

        /**
         *  整个代码并没有显示的调用 close，但是 try 会自动调用
         *  当代码执行完 try 语句块之后，就会自动调用 close
         *
         *  只有符合一定条件才可以放到 try() 中，实现 Closeable 这个接口才可以
         *  所有的流对象都实现了 Closeable 接口，所以这里可以直接放
         */

//        // 1.创建对象，同时打开文件
//        try (InputStream inputStream = new FileInputStream("F:/测试/test.txt")){
//            // 2.一个字节一个字节的读，将整个文件的内容都读完
//            while (true){
//                // 一次读一个字节
//                int b = inputStream.read();
//                if(b==-1){
//                    // 读到文件末尾
//                    break;
//                }
//                System.out.print(b+" ");
//            }
//        } catch (IOException e) {
//            // 操作文件时需要打开文件，如果没有找到文件就会抛出异常
//            e.printStackTrace();
//        }

        try(InputStream inputStream = new FileInputStream("F:/测试/test.txt")) {
            // 一次读若干个字节
            while (true){
                /**
                 *  这个操作是将读出来内容放到 buffer 数组中了
                 *  相当于使用参数来表示方法的返回值
                 *  这种做法称为“输出型参数”
                 */
                byte[] buffer = new byte[1024];
                int len = inputStream.read(buffer);
                if (len==-1){
                    // 如果返回-1，说明读取完毕
                    break;
                }
                for (int i = 0; i < len; i++) {
                    System.out.print(buffer[i]+" ");
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
